package entity

import (
	"time"

	"github.com/google/uuid"
)

const (
	PassedNodeStatus   = 2
	RejectedNodeStatus = -1
	// CanceledNodeStatus 已撤销
	CanceledNodeStatus = -5
)

type Node struct {
	ID             string `json:"id"`
	WorkflowID     string `json:"workflowId"`
	NodeTemplateID string `json:"nodeTemplateId"`
	// Status 1:未审核 2:审核通过 -1:审核未通过
	Status    int       `json:"status"`
	CreatedAt time.Time `json:"createdAt"`
	UpdatedAt time.Time `json:"updatedAt"`
}

func NewRejectedNode(id string) Node {
	return Node{
		ID:     id,
		Status: RejectedNodeStatus,
	}
}

func NewUnderReviewNode(nodeTemplateID, workflowID string) Node {
	uuidV7, _ := uuid.NewV7()

	return Node{
		ID:             uuidV7.String(),
		NodeTemplateID: nodeTemplateID,
		WorkflowID:     workflowID,
		Status:         1,
	}
}

// NewUnderReviewNodeWithStrategy 创建审批中节点
func NewUnderReviewNodeWithStrategy(nodeTemplateID, workflowID, approvalStrategy string) Node {
	uuidV7, _ := uuid.NewV7()

	return Node{
		ID:             uuidV7.String(),
		NodeTemplateID: nodeTemplateID,
		WorkflowID:     workflowID,
		Status:         1,
	}
}

func (n *Node) Pass() {
	n.Status = PassedNodeStatus
}

func (n *Node) Reject() {
	n.Status = RejectedNodeStatus
}

func (n *Node) Cancel() {
	n.Status = CanceledNodeStatus
}

// IsValidToAddReviewer 判断节点是否可以添加审批人员
func (n *Node) IsValidToAddReviewer() bool {
	// 只有状态为1（未审核）的节点才能添加审批人员
	return n.Status == 1
}
